package org.pc2r.game;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.logging.Logger;

import org.pc2r.logging.FrontLogger;
import org.pc2r.network.FrontServer;

/**
 * Une classe contenant les références de toutes les parties du serveur. Cette
 * classe est utilisée par le {@link FrontServer} pour ajouter le client qui se
 * connecte.
 * 
 */
public class GameStore  {

  private List<GameManager> games = new ArrayList<>();
  private Logger logger = FrontLogger.get();

  public GameStore() {
  }

  /**
   * Retourne la liste des parties en cours
   * 
   * @return {@link List} la liste des parties en cours
   */
  public List<GameManager> getGames() {
    return Collections.unmodifiableList(games);
  }

  /**
   * Retourne la partie en cours, ou une nouvelle. S'il n'y a aucune partie on
   * en crée une, sinon si la dernière est pleine, on en crée une nouvelle.
   * Retourne toujours la même partie si aucun joueur ne se connecte jamais
   * 
   * @return {@link GameManager} une partie
   */
  public synchronized GameManager getOrCreate() {
    // On doit créer la première partie
    if (games.isEmpty()) {
      GameManager game = new GameManager(logger, this);
      games.add(game);
      logger.info("Création d'une nouvelle partie.");
      return game;
    }
    // On récupère la dernière partie
    GameManager last = games.get(games.size() - 1);
    // Si elle est pleine, on en crée une nouvelle
    if (last.isFull()) {
      GameManager game = new GameManager(logger, this);
      games.add(game);
      logger.info("Création d'une nouvelle partie.");
      return game;
    }
    return last;
  }
  
  protected final boolean deleteGameManager(GameManager manager) {
    return games.remove(manager);
  }
}
